home *** CD-ROM | disk | FTP | other *** search
Text File | 1986-07-05 | 4.6 KB | 137 lines | [TEXT/TRUE] |
- ! Menu/Window Demo
- ! True Basic version
- ! by Dave Kelly
- ! ©1986 MacTutor
-
- LIBRARY ":Toolbox Libraries:menulib*"
- LIBRARY ":Toolbox Libraries:windowlib*"
- LIBRARY ":Toolbox Libraries:desklib*"
- LIBRARY ":Toolbox Libraries:eventlib*"
- LIBRARY ":Toolbox Libraries:quicklib*"
- LIBRARY ":Toolbox Libraries:datalib*"
- LIBRARY ":Toolbox Libraries:maclib*"
- LIBRARY ":Toolbox Libraries:addr*"
- LIBRARY ":Toolbox Libraries:pass_mac*"
- LIBRARY ":Toolbox Libraries:s_trap*"
- LIBRARY ":Toolbox Libraries:r_trap*"
- LIBRARY ":Toolbox Libraries:tostring*"
-
- DECLARE DEF NIL$,POINTER$,screenBits$,bounds$
- DECLARE DEF OpenDeskAcc,NewWindow$,SystemEdit
- DECLARE DEF MenuSelect
-
- DIM MyMenus$(1:4) ! We have four menus
-
- CALL TakeMac ! Take control of the Mac
- CALL SetUpMenus ! Set up menus
- LET everyevent = -1
- LET doneFlag = 0 ! initialize DO-UNTIL loop
- LET R$ = bounds$(screenBits$) ! Get screen rectangle
- CALL SetRect(R$,100,100,400,225) ! Set window rectangle
- LET myWindow$ = NewWindow$(NIL$,R$,"",-1,1,POINTER$(-1),0,0)
- CALL SetPort(myWindow$)
- CALL Drawwindow
-
- ! Main Event Loop
-
- DO
- CALL SystemTask
- CALL GetNextEvent(everyevent,theEvent$,eResult) ! Get Event
- IF eResult <> 0 then
- CALL UnpackEvent(theEvent$,what,mess,when,where$,mod)
- SELECT CASE what ! Branch on event type
- CASE 1 ! Mouse down event
- CALL FindWindow(where$,whichWindow$,wResult) ! Find out where
- SELECT CASE wResult ! Branch on location
- CASE 1 ! In menu bar
- LET mResult = MenuSelect(where$)
- CALL DoMenu(mResult) ! Act on menu
- CASE 2 ! In System window
- CALL SystemClick(theEvent$,whichWindow$) ! Pass events to desk accessory
- CASE else
- END SELECT ! for mouse-down location
- CASE 6 ! Update event
- CALL Packb(w$,1,32,mess) ! Extract window pointer
- CALL BeginUpdate(w$) ! Begin update
- CALL Drawwindow ! Update window
- CALL EndUpdate(w$) ! End update
- CASE else
- END SELECT
- END IF
- LOOP UNTIL doneFlag <> 0
-
- CALL DisposeWindow(myWindow$)
- CALL ClearMenuBar
- FOR i = Lbound(MyMenus$) TO Ubound(MyMenus$)
- CALL DisposeMenu(MyMenus$(i))
- NEXT i
-
- CALL GiveMac ! Return control to True Basic
- STOP ! all done!!
-
- SUB Drawwindow
- CALL TEXTFONT(2)
- CALL TEXTSIZE(12)
- CALL TEXTFACE(1)
- CALL TEXTMODE(0)
- CALL MOVETO(10,20)
- CALL DRAWSTRING("MacTutor shows you how it works!")
- CALL TEXTFACE(0)
- CALL MOVETO(10,100)
- CALL DRAWSTRING("True BASIC Version 1.1 demo")
- END SUB
-
- SUB DoMenu(code)
- CALL Packb(s$,1,32,code) ! Replace with HiWort and LoWord
- LET MenuNumber = Unpackb(s$,1,-16)
- LET MenuItem = Unpackb(s$,17,-16)
-
- SELECT CASE MenuNumber
- CASE 1 ! Apple Menu
- CALL GetItem(MyMenus$(1),MenuItem,name$) ! Get Menu item name
- LET mrefNum = OpenDeskAcc(name$) ! Open desk accessory
- CALL SetPort(mywindow$) ! Restore current grafport
- CASE 2 ! File Menu
- LET doneFlag = -1 ! Set flag to quit
- CASE 3 ! Edit Menu
- LET z = SystemEdit(Menuitem+1)
- CASE 4 ! Sample Menu
- CALL MOVETO(10,50)
- LET textstring$ = "You have selected menu item " & STR$(menuitem)
- CALL DRAWSTRING(textstring$)
- CASE else ! No Selection
- END SELECT
- CALL HiliteMenu(0) ! unhighlight menu
- END SUB
-
- SUB SetUpMenus
-
- DECLARE DEF NewMenu$
-
- LET MyMenus$(1) = NewMenu$(1,chr$(20)) ! Get apple menu
- CALL AddResMenu(MyMenus$(1),"DRVR") ! Fill it in
-
- LET MyMenus$(2) = NewMenu$(2,"File") ! Get file menu
- CALL AppendMenu(MyMenus$(2),"Quit") ! Quit command
-
- LET MyMenus$(3) = NewMenu$(3,"Edit") ! Get edit menu
- CALL AppendMenu(MyMenus$(3),"Cut") ! Cut command
- CALL AppendMenu(MyMenus$(3),"Copy") ! Copy command
- CALL AppendMenu(MyMenus$(3),"Paste") ! Paste command
-
- LET MyMenus$(4) = NewMenu$(4,"Sample Menu") ! Get sample menu
- CALL AppendMenu(MyMenus$(4),"Item 1") ! Menu item 1
- CALL AppendMenu(MyMenus$(4),"Item 2") ! Menu item 2
- CALL AppendMenu(MyMenus$(4),"Item 3") ! Menu item 3
-
-
- FOR i = Lbound(MyMenus$) to Ubound(MyMenus$)
- CALL InsertMenu(MyMenus$(i),0) ! Insert each menu
- NEXT i
-
- CALL DrawMenuBar ! Draw in the menu bar
-
- END SUB
-
- END
-